package cn.tedu.mall.product.controller;

import cn.tedu.mall.common.pojo.product.dto.AttributeTemplateAddNewDTO;
import cn.tedu.mall.common.pojo.product.dto.AttributeTemplateUpdateDTO;
import cn.tedu.mall.common.pojo.product.vo.AttributeTemplateDetailsVO;
import cn.tedu.mall.common.pojo.product.vo.AttributeTemplateListItemVO;
import cn.tedu.mall.common.pojo.product.vo.AttributeTemplateStandardVO;
import cn.tedu.mall.common.restful.JsonPage;
import cn.tedu.mall.common.restful.JsonResult;
import cn.tedu.mall.product.constant.WebConst;
import cn.tedu.mall.product.service.IAttributeTemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

@RestController
@RequestMapping(value="/pms/attribute-templates")
@CrossOrigin
public class AttributeTemplateController {

    @Autowired
    private IAttributeTemplateService attributeTemplateService;

    @GetMapping("")
    public JsonResult<JsonPage<AttributeTemplateStandardVO>> list(@RequestParam(required = false, defaultValue = WebConst.DEFAULT_PAGE) Integer page, @RequestParam(required = false, defaultValue = WebConst.DEFAULT_PAGE_SIZE) Integer pageSize) {
        JsonPage<AttributeTemplateStandardVO> attributeTemplates = attributeTemplateService.list(page, pageSize);
        return JsonResult.ok(attributeTemplates);
    }

    @PostMapping("/addnew")
    public JsonResult<Void> addNew(@Valid AttributeTemplateAddNewDTO attributeTemplateAddNewDTO) {
        attributeTemplateService.addNew(attributeTemplateAddNewDTO);
        return JsonResult.ok();
    }
    @PostMapping("/{id:[0-9]+}/delete")
    public JsonResult<Void> deleteById(@PathVariable Long id){
        attributeTemplateService.deleteById(id);
        return JsonResult.ok();
    }
    @PostMapping("/{id:[0-9]+}/update")
    public JsonResult<Void> updateById(@PathVariable Long id, @Valid AttributeTemplateUpdateDTO attributeTemplateUpdateDTO){
        attributeTemplateService.updateById(id,attributeTemplateUpdateDTO);
        return JsonResult.ok();
    }
    //根据类别Id查询模板列表信息
    @GetMapping("/list-by-category")
    public JsonResult<List<AttributeTemplateListItemVO>> listByCategoryId(@RequestParam Long categoryId) {
        return JsonResult.ok(attributeTemplateService.listByCategoryId(categoryId));
    }

    //查询属性模板详情
    @GetMapping("/{id:[0-9]+}/details")
    public JsonResult<AttributeTemplateDetailsVO> getDetailsById(@PathVariable Long id) {
        AttributeTemplateDetailsVO attributeTemplateDetailsVO = attributeTemplateService.getDetailsById(id);
        return JsonResult.ok(attributeTemplateDetailsVO);
    }

    //查询属性模板详情，包含销售属性
    @GetMapping("/{id:[0-9]+}/details/attribute-inclusion/sale")
    public JsonResult<AttributeTemplateDetailsVO> getDetailsIncludeSaleAttributeById(@PathVariable Long id) {
        AttributeTemplateDetailsVO attributeTemplateDetailsVO = attributeTemplateService.getDetailsIncludeSaleAttributeById(id);
        return JsonResult.ok(attributeTemplateDetailsVO);
    }

    //查询属性模板详情，包含非销售属性
    @GetMapping("/{id:[0-9]+}/details/attribute-inclusion/non-sale")
    public JsonResult<AttributeTemplateDetailsVO> getDetailsIncludeNonSaleAttributeById(@PathVariable Long id) {
        AttributeTemplateDetailsVO attributeTemplateDetailsVO = attributeTemplateService.getDetailsIncludeNonSaleAttributeById(id);
        return JsonResult.ok(attributeTemplateDetailsVO);
    }

}
